package org.jiajie.coffeecodes.concurrent.pattern.immutable;

/**
 * @author jay
 */
public class StringDemo {

    private final char value[];

    public StringDemo(char[] value) {
        this.value = value;
    }

    StringDemo replace(char oldChar, char newChar){
        // 无需替换，直接返回this
        if (oldChar == newChar) {
            return this;
        }

        int len = value.length;
        int i = -1;

        /* avoid get field opcode */
        char[] val = value;
        // 定位到需要替换的字符位置
        while (++i < len) {
            if (val[i] == oldChar) {
                break;
            }
        }
        // 未找到oldChar，无需替换
        if (i >= len) {
            return this;
        }

        // 创建一个buf[]，这是关键，
        // 用来保存替换后的字符串
        char buf[] = new char[len];
        for (int j = 0; j < i; j++) {
            buf[j] = val[j];
        }
        while (i < len) {
            char c = val[i];
            buf[i] = (c == oldChar) ? newChar : c;
            i++;
        }
        // 创建一个新的字符串返回，
        // 原字符串不会发生任何变化
//        return new StringDemo(buf, true);
        return null;
    }
}
